home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 10 / The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso / PC_SIGCD / 20 / 5 / DISK2058.ZIP / UNFAST.EXE / FASTT.F < prev    next >
Text File  |  1980-01-01  |  4KB  |  224 lines

  1.  
  2. ;===========================================================================
  3. ;==  FASTT source code debugger - FAST v2.00+                  ==
  4. ;==  Written by Peter Campbell 1989.                      ==
  5. ;===========================================================================
  6.  
  7. #short
  8. var m,t_base,seg_ft
  9. var32 addr,addrs
  10.  
  11. fcom     ? 64
  12. work     ? 64
  13. sets     ? 50*2
  14. setsn     ? 50*64
  15. cmd_line ? 120
  16. buffer     ? 650
  17. lines     ? 24*2
  18.  
  19. dos 35(3):o3=reg bx:s3=reg es
  20.  
  21. proc abort
  22.     {
  23.     print bios "... Terminated."
  24.     reg dx=o3,ds=s3:dos 25(3)
  25.     reg ds=reg cs
  26.     terminate
  27.     }
  28.  
  29. on error
  30.     {
  31.     print bios
  32.     error msg "\dos.err"
  33.     print bios "!"
  34.     abort
  35.     }
  36.  
  37. on break error 999
  38.  
  39. function find_file(fh)
  40.     {
  41.     am=t_base
  42.     ffloop:
  43.     if seg_ft[am+1]=0 then return 0
  44.     if seg_ft[am]b=fh then return 1
  45.     am+=6
  46.     goto ffloop
  47.     }
  48.  
  49. function find_address(fm)
  50.     {
  51.     am=t_base
  52.     faloop:
  53.     n=seg_ft[am+1]
  54.     if n=0 then return 0
  55.     if n=fm then return am
  56.     am+=6
  57.     goto faloop
  58.     }
  59.  
  60. function get_buffer
  61.     {
  62.     gf=seg_ft[m]b
  63.     fp=sets+gf*2
  64.     mn=setsn+gf*64
  65.     handle#1,peek fp
  66.     a1=seg_ft[m+3]
  67.     a2=seg_ft[m+5]b
  68.     addrs=a2*65536
  69.     addrs+=a1
  70.  
  71.     r=search 24 from lines for a1 ;low addrs
  72.     if r then return 1+(r-lines)/2
  73.  
  74.     addr=addrs
  75.     seek #1,addr
  76.     l=read #1,640 to buffer
  77.     pokeb buffer+l,26
  78.     return 1
  79.     }
  80.  
  81. proc show_buffer
  82.     {
  83.     colour 15
  84.     fill 80 from video|0 with 0f20h
  85.     locate 0,0:print " -FASTT file: ";:prints mn,0
  86.     md=buffer:ml=lines:mlo=low addr-buffer
  87.     colour 7
  88.     for yp=1 to 24
  89.     locate yp,0
  90.     poke ml,mlo+md:ml+=2
  91.     md=printm md,80
  92.     next yp
  93.     }
  94.  
  95. print bios "FastT ";
  96.  
  97. seg_ft=allocate 4096
  98.  
  99. m=81h:f=fcom
  100. mstore=0
  101. while peekb m<>13
  102.     {
  103.     c=peekb m
  104.     if c>' ' then
  105.     {
  106.     mstore=1
  107.     pokeb f,c:f++:if f>(fcom+63) then goto use_file
  108.     }
  109.     else if mstore then goto use_file
  110.     m++
  111.     }
  112.  
  113. use_file:
  114. pokeb f,0
  115. if mstore=0 then print bios "file?":abort
  116. moveb 120 from m to cmd_line
  117.  
  118. print bios "running ";
  119. m=fcom
  120. while (peekb m<>0) and (peekb m<>'.') print bios chr ucase peekb m;:m++
  121. pokeb m,'.':print bios cr lf
  122. m++
  123. move 32 from fcom to work
  124. moveb 4 from ext_com to m
  125. moveb 3 from ext_ft to work+m-fcom
  126.  
  127. open #1,work
  128. rl=read #1,65500 to seg_ft|0
  129. close #1
  130. seg_ft[rl+1]=0 ;Set end marker.
  131. modify seg_ft to 1+rl/16
  132.  
  133. m=sets:fp=1:mn=setsn
  134. sources=seg_ft[0]b
  135. t_base=1+sources*64
  136. print bios "Source file(s) ";
  137. for so=1 to sources
  138.     move 32 from seg_ft|fp to work
  139.     move 32 from work       to mn
  140.     p=work:while peekb p<>'.' print bios chr ucase peek p;:p++
  141.     print bios " ";
  142.     if find_file(so-1) then
  143.     {
  144.     open #1,work
  145.     poke m,handle#1
  146.     }
  147.     m+=2:mn+=64
  148.     fp+=64
  149. next so
  150.  
  151. print bios
  152. poke exe_com+4,reg cs
  153. poke exe_com+8,reg cs
  154. poke exe_com+12,reg cs
  155.  
  156. setint 3 to fast3
  157. show=1:using=0
  158.  
  159. execute fcom,exe_com
  160.  
  161. page 0
  162. abort
  163.  
  164. ;= Data ====================================================================
  165.  
  166. ext_com:
  167. datab 'com',0
  168.  
  169. ext_ft:
  170. datab 'ft',0
  171.  
  172. exe_com:
  173. data 0
  174. data cmd_line,0
  175. data 5ch,0
  176. data 6ch,0
  177.  
  178. ;== Fast3 =========================================================================
  179.  
  180. fast3:
  181. pushall
  182.  
  183. reg ds=reg cs
  184. if using then goto exit3
  185. using=1
  186. ip=peek reg ss|(reg sp+20)
  187. cs=peek reg ss|(reg sp+22)
  188.  
  189. if show then
  190.     {
  191.     m=find_address(ip)
  192.     if m then
  193.     {
  194.     hy=get_buffer
  195.     show_buffer
  196.     m=hy*160+1
  197.     repeat 80 video[m]b=120:m+=2
  198.     wait for keyscan
  199.     test break
  200.     }
  201.     }
  202.  
  203. ;Call ON TRACE statement.
  204. if cs[113h] then
  205.     {
  206.     push reg cs
  207.     push ret_trace
  208.     push cs
  209.     push cs[113h]
  210.     reg ds=cs,es=cs
  211.     retf
  212.     ret_trace:
  213.     reg ds=reg cs
  214.     }
  215.  
  216. show=1
  217. if peekb 0|417h and 16 then show=0
  218.  
  219. using=0
  220.  
  221. exit3:
  222. popall
  223. iret
  224.